<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Content-Language" content="zh-CN"><link href="stylesheet.css" media="all" rel="stylesheet" type="text/css">
<title>创建一个数据库</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head><body class="SECT1">
<div>
<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><th colspan="5" align="center" valign="bottom">PostgreSQL 8.2.3 中文文档</th></tr>
<tr><td width="10%" align="left" valign="top"><a href="tutorial-arch.html" accesskey="P">后退</a></td><td width="10%" align="left" valign="top"><a href="tutorial-start.html">快退</a></td><td width="60%" align="center" valign="bottom">章1. 从头开始</td><td width="10%" align="right" valign="top"><a href="tutorial-start.html">快进</a></td><td width="10%" align="right" valign="top"><a href="tutorial-accessdb.html" accesskey="N">前进</a></td></tr>
</table>
<hr align="LEFT" width="100%"></div>
<div class="SECT1"><h1 class="SECT1"><a name="TUTORIAL-CREATEDB">1.3. 创建一个数据库</a></h1><a name="AEN434"></a><a name="AEN437"></a>
<p>看看你能否访问数据库服务器的第一个例子就是试着创建一个数据库。一台运行着的 PostgreSQL 服务器可以管理许多数据库。通常我们会为每个项目和每个用户单独使用一个数据库。</p>
<p>节点管理员可能已经为你创建了可以使用的数据库。他应该已经告诉你这个数据库的名字。如果这样你就可以省略这一步，并且跳到下一节。</p>
<p>要创建一个新的数据库(在我们这个例子里叫 <tt class="LITERAL">mydb</tt>)，你可以使用下面的命令：</p>
<pre class="SCREEN"><samp class="PROMPT">$</samp> <kbd class="USERINPUT">createdb mydb</kbd></pre>
<p>它应该生成下面这样的响应：</p>
<pre class="SCREEN">CREATE DATABASE</pre>
<p>如果这样，那么这一步就成功了，你就可以忽略本节余下的部分了。</p>
<p>如果你看到类似下面这样的信息：</p>
<pre class="SCREEN">createdb: command not found</pre>
<p>那么就是 PostgreSQL 没有安装好：要么是就根本没装上、要么是搜索路径没有设置正确。尝试用绝对路径调用该命令试试：</p>
<pre class="SCREEN"><samp class="PROMPT">$</samp> <kbd class="USERINPUT">/usr/local/pgsql/bin/createdb mydb</kbd></pre>
<p>在你的节点上这个路径可能不一样。请和管理员联系或者看看安装指导以获取正确的位置。</p>
<p>另外一种响应可能是这样：</p>
<pre class="SCREEN">createdb: could not connect to database postgres: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?</pre>
<p>这意味着服务器没有启动，或者没有在 <tt class="COMMAND">createdb</tt> 预期的地方启动。同样，你也要检查安装指导或者找管理员。</p>
<p>另外一个响应可能是这样：</p>
<pre class="SCREEN">createdb: could not connect to database postgres: FATAL:  role "joe" does not exist</pre>
<p>在这里提到了你自己的登陆名。如果管理员没有为你创建 PostgreSQL 用户帐号，就会发生这些现像。PostgreSQL 用户帐号和操作系统用户帐号是不同的。如果你就是管理员，参阅<a href="user-manag.html">章18</a>以获取创建用户帐号的帮助。你需要变成安装 PostgreSQL 的操作系统用户的身份(通常是 <tt class="LITERAL">postgres</tt>)才能创建第一个用户帐号。也有可能是赋予 PostgreSQL 用户名和操作系统用户名不同；这种情况下，你需要使用 <tt class="OPTION">-U</tt> 开关或者使用 <tt class="ENVAR">PGUSER</tt> 环境变量声明 PostgreSQL 用户名。</p>
<p>如果你有个数据库用户帐号，但是没有创建数据库所需要的权限，那么你会看到下面的东西：</p>
<pre class="SCREEN">createdb: database creation failed: ERROR:  permission denied to create database</pre>
<p>并非所有用户都经过了创建新数据库的授权。如果 PostgreSQL 拒绝为你创建数据库，那么你需要让节点管理员赋予你创建数据库的权限。出现这种情况时请咨询你的节点管理员。如果你自己安装了 PostgreSQL ，那么你应该以你启动数据库服务器的用户身份登陆然后参考手册完成权限的赋予工作。<a name="AEN472" href="tutorial-createdb.html#FTN.AEN472"><span class="footnote">[1]</span></a></p>
<p>你还可以用其它名字创建数据库。PostgreSQL 允许你在一个节点上创建任意数量的数据库。数据库名必须是以字母开头并且小于 63 个字符长。一个方便的做法是创建和你当前用户名同名的数据库。许多工具假设它为缺省的数据库名，所以这样可以节省敲键。要创建这样的数据库，只需要键入：</p>
<pre class="SCREEN"><samp class="PROMPT">$</samp> <kbd class="USERINPUT">createdb</kbd></pre>
<p>如果你再也不想使用你的数据库了，那么你可以删除它。比如，如果你是数据库 <tt class="LITERAL">mydb</tt> 的属主(创建人)，那么你就可以用下面的命令删除它：</p>
<pre class="SCREEN"><samp class="PROMPT">$</samp> <kbd class="USERINPUT">dropdb mydb</kbd></pre>
<p>对于这条命令而言，数据库名不是缺省的用户名，你必须明确声明它。这个动作物理上将所有与该数据库相关的文件都删除并且不可恢复，因此做这件事之前一定要想清楚。</p>
<p>更多关于 <tt class="COMMAND">createdb</tt> 和 <tt class="COMMAND">dropdb</tt> 的信息可以在 <a href="app-createdb.html"><span class="APPLICATION">createdb</span></a> 和 <a href="app-dropdb.html"><span class="APPLICATION">dropdb</span></a> 小节找到。</p>
</div>
<h3 class="FOOTNOTES">注意</h3>
<table border="0" class="FOOTNOTES" width="100%">
<tr><td align="LEFT" valign="TOP" width="5%"><a name="FTN.AEN472" href="tutorial-createdb.html#AEN472"><span class="footnote">[1]</span></a></td><td align="LEFT" valign="TOP" width="95%"><p>为什么这么干就行了? 解释如下：PostgreSQL 用户名是和操作系统用户账号分开的。如果你与一个数据库连接，你可以指定以哪个 PostgreSQL 用户名进行连接；如果你不指定，那么缺省就是你当前的操作系统账号。如果这样，那么总有一个与操作系统用户同名的 PostgreSQL 用户账号用于启动服务器，并且通常这个用户都有创建数据库的权限。如果你不想以该用户身份登陆，那么你也可以在任何地方声明一个 <tt class="OPTION">-U</tt> 选项来选择一个连接时使用的 PostgreSQL 用户名。</p></td></tr>
</table>
<div>
<hr align="LEFT" width="100%">
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td width="33%" align="left" valign="top"><a href="tutorial-arch.html" accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">首页</a></td><td width="33%" align="right" valign="top"><a href="tutorial-accessdb.html" accesskey="N">前进</a></td></tr>
<tr><td width="33%" align="left" valign="top">体系基本概念</td><td width="34%" align="center" valign="top"><a href="tutorial-start.html" accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">访问数据库</td></tr>
</table>
</div>
</body></html>